package com.tbynet.jwp.repository.spi;

import java.util.List;

import com.jfinal.plugin.activerecord.Page;
import com.tbynet.jwp.framework.core._JwpService;
import com.tbynet.jwp.model.TermTaxonomy;

/**
 * 分类法服务接口
 * @ClassName: TermTaxonomyService
 * @Description: 负责分类法数据的获取、添加、修改、删除功能，职责单一，不处理复杂业务逻辑
 * @Author: 佰亿互联
 * @Date: 2025年11月4日
 *
 * @Copyright: 2025 www.tbynet.com Inc. All rights reserved.
 * 注意: 本内容仅限于内部传阅，禁止外泄以及用于其他的商业目
 */
public interface TermTaxonomyService extends _JwpService<TermTaxonomy> {

    // ============ 查询相关方法 ============

    /**
     * 根据分类ID和分类法获取分类法
     * @param termId 分类ID
     * @param taxonomy 分类法
     * @return 分类法对象
     */
    TermTaxonomy getTermTaxonomy(Object termId, String taxonomy);

    /**
     * 根据分类法类型获取分类法列表
     * @param taxonomy 分类法类型
     * @return 分类法列表
     */
    List<TermTaxonomy> getTermTaxonomies(String taxonomy);

    /**
     * 搜索分类法
     * @param pageNumber 页码
     * @param pageSize 每页大小
     * @param taxonomy 分类法类型
     * @param q 搜索关键词
     * @return 分类法分页对象
     */
    Page<TermTaxonomy> search(int pageNumber, int pageSize, String taxonomy, String q);

    // ============ 删除相关方法 ============

    /**
     * 删除分类法
     * @param termId 分类ID
     * @param taxonomy 分类法类型
     * @return 删除结果
     */
    boolean deleteTermTaxonomy(Object termId, String taxonomy);

    // ============ 检查相关方法 ============

    /**
     * 检查分类是否有子分类
     * @param termId 分类ID
     * @param taxonomy 分类法
     * @return 是否有子分类
     */
    boolean hasChildren(Object termId, String taxonomy);

    /**
     * 获取分类的父级ID
     * @param termId 分类ID
     * @param taxonomy 分类法
     * @return 父级ID
     */
    Number getParent(Object termId, String taxonomy);

    // ============ 工具方法 ============

    /**
     * 更新子分类的父级
     * @param termId 分类ID
     * @param taxonomy 分类法
     * @param newParent 新的父级ID
     * @return 更新结果
     */
    boolean updateChildrenParent(Object termId, String taxonomy, Object newParent);

    /**
     * 根据分类项获取或创建分类法
     * @param termId 分类项ID
     * @param taxonomy 分类法类型
     * @return 分类法对象
     */
    TermTaxonomy getOrCreateTermTaxonomy(Object termId, String taxonomy);

    /**
     * 根据名称和分类法获取分类法
     * @param name 分类项名称
     * @param taxonomy 分类法类型
     * @return 分类法对象
     */
    TermTaxonomy getTermTaxonomyByNameAndTaxonomy(String name, String taxonomy);
}